<?php


abstract class manager
{
    public $subject;//用于加载专题内容
    public $myState = 0;//当前状态，这个很重要
    public $leader = false;//很重要，设置自己的领导是谁
    public $name="";//当前审批这的名字
    function __construct()
    {
        //读取我们的专题
        $this->subject = json_decode(file_get_contents(__DIR__.'/../subject.json'));
    }
    public function setLeader($leader)
    {
        $this->leader = $leader;//设置领导，关键方法，也是形成责任链的关键
    }

    /**
     * 审批
     * @param $msg 审批意见
     */
    public function step($msg){
        //很重要，代表审批
        //只有当subject的state和自己的myState相等时才会处理
        if ($this->subject->state == $this->myState){
            //在这执行审批通过的具体
            if($this->leader){
                $this->subject->state=$this->leader->myState;//交控制权
                file_put_contents(__DIR__.'/../subject.json', json_encode($this->subject));
            }else{
                echo "审批已结束.";
            }
            echo $msg.'，审批者是：'.$this->name;
        }else{
            if ($this->leader){//让自己的领导去审批，leager就是维护整个类的链
                $this->leader->step($msg);
            }
        }
    }
}